"use strict";
const BaseController = require("../base");

// 定义创建接口的请求参数规则
const getSkuListRule = {
  page: "number",
  limit: "number",
};

const saveSkuRule = {
  skuName: "string",
  skuDesc: "string",
  weight: "string",
  tmId: "string",
  category3Id: "string",
  skuImageList: {
    type: "array",
    itemType: "string",
    required: true,
  },
  skuDefaultImg: "string",
  skuSaleAttrList: {
    type: "array",
    itemType: "object",
    required: true,
    rule: {
      saleAttrId: "string",
      saleAttrName: "string",
      saleAttrValueId: "string",
      saleAttrValueName: "string",
    },
  },
  skuAttrList: {
    type: "array",
    itemType: "object",
    required: true,
    rule: {
      attrId: "string",
      attrName: "string",
      attrValueId: "string",
      attrValueName: "string",
    },
  },
  spuId: "string",
  price: "number",
  skuNum: "number",
};

const updateSkuRule = {
  ...saveSkuRule,
  id: "string",
};

const removeSkuRule = {
  id: "string",
};

const updateIsSaleRule = {
  skuId: "string",
  isSale: "number",
};

const findSkuListBySpuIdRule = {
  spuId: "string",
};

const getSkuBySkuIdRule = {
  skuId: "string",
};

class SkuController extends BaseController {
  async getSkuList() {
    const ctx = this.ctx;
    // 如果参数校验未通过，将会抛出一个 status = 422 的异常
    const { params } = ctx; // 参数是string类型，但是会自动转化的
    ctx.validate(getSkuListRule, params);
    const data = await ctx.service.product.sku.getSkuList(params);
    this.success(data);
  }
  async findSkuListBySpuId() {
    const ctx = this.ctx;
    // 如果参数校验未通过，将会抛出一个 status = 422 的异常
    const { params } = ctx; // 参数是string类型，但是会自动转化的
    ctx.validate(findSkuListBySpuIdRule, params);
    const data = await ctx.service.product.sku.findSkuListBySpuId(params.spuId);
    this.success(data);
  }
  async getSkuBySkuId() {
    const ctx = this.ctx;
    // 如果参数校验未通过，将会抛出一个 status = 422 的异常
    const { params } = ctx; // 参数是string类型，但是会自动转化的
    ctx.validate(getSkuBySkuIdRule, params);
    const data = await ctx.service.product.sku.getSkuBySkuId(params.skuId);
    this.success(data);
  }

  async saveSku() {
    const ctx = this.ctx;
    // 校验参数是否符合我们预期的格式
    // 如果参数校验未通过，将会抛出一个 status = 422 的异常
    const body = ctx.request.body;
    ctx.validate(saveSkuRule, body);
    const data = await ctx.service.product.sku.saveSku(body);
    this.success(data);
  }
  async updateSku() {
    const ctx = this.ctx;
    const body = ctx.request.body;
    ctx.validate(updateSkuRule, body);
    const success = await ctx.service.product.sku.updateSku(body);
    if (success) {
      this.success();
    } else {
      this.fail();
    }
  }
  async removeSku() {
    const ctx = this.ctx;
    // 校验参数是否符合我们预期的格式
    const id = ctx.params.id;
    // 如果参数校验未通过，将会抛出一个 status = 422 的异常
    ctx.validate(removeSkuRule, {
      id,
    });
    const success = await ctx.service.product.sku.removeSku(id);
    if (success) {
      this.success();
    } else {
      this.fail();
    }
  }
  async updateIsSale() {
    const ctx = this.ctx;
    // 校验参数是否符合我们预期的格式
    const params = ctx.params;
    // 如果参数校验未通过，将会抛出一个 status = 422 的异常
    ctx.validate(updateIsSaleRule, params);
    const data = await ctx.service.product.sku.updateIsSale(params);
    this.success(data);
  }
}

module.exports = SkuController;
